データグリッドでアイテムエディターを使用すると、TABキーを押下したときに次のコントロールに遷移してくれます。
しかし、アイテムレンダラーを使用すると、TABキーを押下しても次のコントロールに遷移してくれません。
どうすれば実現できるかを調べたところ、単純なアイテムレンダラーであれば、アイテムエディターのようにTABキーを押下したときに次のコントロールに遷移させる方法は、簡単なプロパティの設定だけで実現できることがわかりました。
以下、その方法を簡単にご紹介します。
①データグリッドコントロールの editable プロパティを trueにします。
<mx:DataGrid editable="true">
※このプロパティを true に設定すると、データグリッド内の各列に アイテムエディターが作成されるので、不要な列は DataGridColumnの editable プロパティを false に設定します。
②アイテムエディターのインスタンスが必須ですので、アイテムレンダラーとアイテムエディターが同じ場合は、DataGridColumnの rendererIsEditor プロパティを false に設定します。
<mx:DataGridColumn headerText="列2" dataField="name"
rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/>
簡単なサンプルを下記に示します。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
<mx:Script>
<![CDATA[
[Bindable]
private var dgData:Array = [
{no:1, name:'氏名1', age:21, address:'住所1'},
{no:2, name:'氏名2', age:22, address:'住所2'},
{no:3, name:'氏名3', age:23, address:'住所3'},
{no:4, name:'氏名4', age:24, address:'住所4'},
{no:5, name:'氏名5', age:25, address:'住所5'}
];
]]>
</mx:Script>
<mx:DataGrid dataProvider="{dgData}" editable="true">
<mx:columns>
<mx:DataGridColumn headerText="列1" dataField="no" editable="false"/>
<mx:DataGridColumn headerText="列2" dataField="name"
rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/>
<mx:DataGridColumn headerText="列3" dataField="address"
rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
単純な アイテムレンダラー(コンテナが無いコンポーネント)であれば、これだけです。一見したら何もしていないようにも見えます(^^;)
この方法は、FXUGのフォーラム(⇒ここ)で見つけました。
しかし、コンテナがあるアイテムレンダラー(1つのアイテムレンダラー内に複数のコンポーネントがある)のように、まずアイテムレンダラー内だけでフォーカス遷移し、最後のコンポーネントでTABキーを押下されたときに、次のアイテムレンダラーに移るといったような複雑なことを実現するには、少々アイテムレンダラーに使用するコンポーネントをカスタマイズする必要があります。
それについては、次回ご紹介します。